#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "utils.h"
#include <QObject>
#include <QDebug>
#include <QFileDialog>
#include "textcolortab.h"
#include "themeinfotab.h"
#include "loadingcolortab.h"
#include "dialogboxestab.h"
#include <QColor>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonArray>
#include <QMessageBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void openFile();
    void saveFile();
    void aboutQt();
    void aboutMyself();

    void updateLabelColor(QColor labelPrimaryColor, QColor labelSecondaryColor, QColor labelIconSetColor, QColor labelSetActiveColor, QColor labelTransitionScreen);
    void updatePrimaryColor();
    void updateSecondaryColor();
    void updateIconSetColor();
    void updateIconSetActiveColor();
    void updateTransitionScreenColor();

    void updateLabelLoadingColor(QColor labelLoadingIconColor, QColor labelLoadingTextColor, QColor labelFreTextColor, QColor labelVersionTextColor, QColor labelPercentageTextColor);
    void updateLoadingIconColor();
    void updateLoadingTextColor();
    void updateFreTextColor();
    void updateVersionTextColor();
    void updatePercentageTextColor();

    void updateLabelDialogBoxesColor(QColor labelBoxColor, QColor labelBoxOutlineColor, QColor labelDialogBackground, QColor labelDialogButton, QColor labelDialogButtonText);
    void updateBoxColor();
    void updateBoxOutlineColor();
    void updateDialogBackground();
    void updateDialogButton();
    void updateDialogButtonText();

    void updateThemeInfos(QString themeName, QString themeVer, QString themeDesc);
    void updateThemeName();
    void updateThemeVersion();
    void updateThemeDescription();

signals:
    void jsonDataUpdated(QString jsonData);

private:
    Ui::MainWindow *ui;

    QString m_jsonData;
    QJsonObject m_jsonObject;

    textColorTab *m_textColorTab;
    loadingColorTab *m_loadingColorTab;
    dialogBoxesTab *m_dialogBoxesTab;
    themeInfoTab *m_themeInfoTab;
};

#endif // MAINWINDOW_H
